package com.qd.hik.dto.charge;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;
import java.util.Optional;

/**
 * 〈一句话功能简述〉<br>
 *
 * @author sjk
 * @create 2024-05-30 12:24
 * @since 1.0.0
 */
@Data
@Accessors(chain = true)
public class HkParkOrdersDetailResp {
    /**
     * 停车场编码
     */
    private String parkCode;
    /**
     * 停车场名称
     */
    private String parkName;
    /**
     * 泊位号
     */
    private String berthNo;
    /**
     * 是否支持支付，0-否，1-是
     */
    private Integer supportPayment;
    /**
     * 订单是否完成0-否 1-是
     */
    private Integer isFinished;
    /**
     * 停车状态，1-正在停车，2-已经出场
     */
    private Integer parkState;
    /**
     * 支付完成后的免费逗留时长（固定值），单位：分钟，shouldPayLeft==0 时返回该字段
     */
    private Integer lingerTime;
    /**
     * 订单标识
     */
    private String uniqueId;
    /**
     * 停车开始时间 2021/04/01 12:00:00
     */
    private String parkStartTime;
    /**
     * 出场时间 2021/04/01 14:10:00
     */
    private String parkEndTime;
    /**
     * 停车时长，如：2小时10分钟
     */
    private String parkTimeText;
    /**
     * 停车时长原始数据值，用于比较减免时长优惠券，单位：分钟
     */
    private String parkTime;
    /**
     * 车牌号码
     */
    private String plateNo;
    /**
     * 剩余待支付金额
     */
    private String shouldPayLeft;
    /**
     * 非支付状态下账单状态说明
     */
    private String commentTitle;
    /**
     * 非支付状态下账单状态详细说明
     */
    private String comment;
    /**
     * 优惠券使用情况，1-使用优惠券，2-不使用优惠券，3-无优惠券可用，4-达到使用上限
     */
    private Integer couponState;
    /**
     * 预缴押金，单位：分
     */
    @JsonProperty("precharge")
    private Integer precharge;
    /**
     * 实际已支付总金额，单位：分
     */
    private Integer actualPaidTotal;
    /**
     * 是否存在支付记录，0-否，1-是
     */
    private Integer hasPayRecord;
    /**
     * 账单总金额，单位：分
     */
    private Integer shouldPayTotal;
    /**
     * 账单获取失败的错误提示语
     */
    private String feeErrorText;
    /**
     * 历史欠费总金额
     */
    private Integer arrearsMoney;
    /**
     * 优惠信息
     */
    private CouponInfo couponInfo;
    /**
     * 是否存在停车申诉 0-否，1-是
     */
    private Integer hasAppeal;

    public void freeData() {
        this.parkCode = null;
        this.parkName = null;
        this.berthNo = null;
        this.supportPayment = null;
        this.isFinished = null;
        this.parkState = null;
        this.lingerTime = null;
        this.uniqueId = null;
        this.parkStartTime = null;
        this.parkEndTime = null;
        this.parkTimeText = null;
        this.parkTime = null;
        this.plateNo = null;
        this.shouldPayLeft = null;
        this.commentTitle = null;
        this.comment = null;
        this.couponState = null;
        this.precharge = null;
        this.actualPaidTotal = null;
        this.hasPayRecord = null;
        this.shouldPayTotal = null;
        this.feeErrorText = null;
        this.arrearsMoney = null;
        this.hasAppeal = null;
        Optional.ofNullable(couponInfo).ifPresent(CouponInfo::freeData);
    }

    @Data
    @Accessors(chain = true)
    static class CouponInfo {
        /**
         * 优惠券名称
         */
        private String couponName;
        /**
         * 可使用优惠券
         */
        private List<String> couponCodes;
        /**
         * 当次优惠金额
         */
        private Integer discount;

        public void freeData() {
            this.couponName = null;
            if (null != this.couponCodes) {
                this.couponCodes = null;
            }
            this.discount = null;
        }
    }
}